import requests
import keyword

# python基础讲解

# print("hello world!!")

# 变量
shot_id = 1  # 定义一个变量shot_id,并赋予值为1
print(shot_id)
# python中提供了一个内置函数type(),可以查看该变量的数据类型
print(type(shot_id))
shot_id += 1
# shot_id++  # invalid syntax 在python中不支持++或者--，给定的值默认是一个常量值，所以没法做自加或者自减
print(shot_id)

# 变量名必须是大小写英文字母、数字或下划线 _ 的组合，不能用数字开头，并且对 大小写敏感
aaa = 10
AAA = 20
print(aaa)
print(AAA)

print(keyword.kwlist)  # 列出所有关键字
shot_id = '你好'
print(shot_id)
# print("该变量的数据类型是：" + type(shot_id))  # 加号做字符串拼接的时候，两边必须都是字符串
print("该变量的数据类型是：", type(shot_id))  # 这里的逗号相当于一个空格

#  常量
#  我们常常约定使用大写字母组合的变量 名表示常量，也有不要对其进行赋值,实际上也可以对其进行修改
# PI = 3.14
# PI = 5.123
# print(PI)

# 注释
# 单行注释  #
# 多行注释  '''你要注释的内容 '''
# 多行注释  """你要注释的内容"""
'''
这是被多行注释的内容
'''
"""
这是被多行注释的内容
"""

# print shot_id

# 定义一个字符串 使用单引号或者双引号效果一样
name = 'xiaohu'
name2 = "小虎"

print(name, type(name))
print(name2, type(name2))
print(2 + 3)

# 定义一个小数
f1 = 2.12
# f2 = 10000000000.23
f2 = 1e10 + 0.23
print(f1, type(f1))
print(f2, type(f2))

# 字符串中的转移字符 \n换行输出  \t tab键默认是4个空格
print("小虎今年18岁\n存款1个亿")
print("小虎今年18岁\t存款1个亿")
# 让转义字符失效，在字符串引号前加一个rz
print(r"小虎今年18岁\t存款1个亿")

# bool类型 True  False 在Python布尔类型的首字母都是大写
print(not 3 < 4)

# print(null)  #  在python中空值不叫null
print(None)  # 在python中空值为None

# 算术运算符
x = 3
y = 4
# 加法运算
print(x + y)  # 7
# 减法运算
print(x - y)  # -1
# 乘法运算
print(x * y)  # 12
# 除法运算 一个/不是整除的意思，有小数部分
print(x / y)  # 0。75
# 整除 //  不会四舍五入
print(x // y)  # 0
# 次方 3的4次方
print(3 ** 4)

# 函数 int()、float()、str() 和 bool() 分别用于将变量转换 成整型、浮点型、字符串和布尔型变量
a = 10
print(a, type(a))
print(float(a), type(float(a)))

aa = '100'
print(aa, type(aa))
print(float(aa), type(float(aa)))

aa = ''  # 空字符串对应的bool类型值为False,其他都为True
print(bool(aa), type(bool(aa)))

aa = -1  # 数字为0或者0.0的时候对应的bool类型值为False,其他都为True
print(bool(aa), type(bool(aa)))

aa = 0.0
print(bool(aa), type(bool(aa)))

# 定义一个列表
# 也是有下标索引的，下标索引是从左往右，从0开始标号
# 从右往左是从-1开始编号
list1 = [10, 2.14, 'xiaohu', True, None]
print(list1, type(list1))
# list1.append('a')  # 使用append方法，在列表的末尾进行添加
# print(list1, type(list1))
# list1.remove(2.14)  # remove中传入的是要移除的值
# print(list1, type(list1))
# del list1[1]
# print(list1, type(list1))

# 需求：获取'xiaohu'的值
print(list1[2])
print(list1[-3])
# 获取列表的长度，len()
print("list1列表的长度为", len(list1))
# 如何遍历一个列表？
# 含头不含尾，一个冒号，左边表示开始的索引，右边表示结束的位置+1
print(list1[1:3])
print(list1[-4:-2])

# print(list1[-2:-4])
# 添加步长获取
print(list1[0:-1:2])

# 获取所有的元素
print(list1[0:-1])
print(list1[0:])
# 步长如果不写，默认为1
print(list1[::])

list2 = [1, 2, 3, 4, ['a', 'b', 'c']]
print(list2[4][1])
print(list2[:])

# 元组 () 元组中的元素是无序的，且不允许增加或删除，当我们确定一个序列中的值不会发生改变的时候，我们将这个序列定义为一个元组
tuple1 = (11, 22, 33, 44)
tuple2 = (22, 33, 44, 55, 66, 77, 88)
# 获取和列表的方式是一样的
print(tuple1[2])

# 字典
dict1 = {1001: 'xiaohu', 1002: 'likaidi', '爱好': '学习'}
# 字典中的获取，没有下标索引，传入的是key的值
print(dict1[1001])  # 返回的是key对应的value值
# 在python3中如果key不存在，直接报错，python2中返回None
# print(dict1[1004])

# 判断某一个key是否存在字典中
print(1004 in dict1)
# 在python3中没有has_key()函数
# print(dict1.has_key(1001))
keys1 = dict1.keys()  # 获取所有的key
print(keys1, type(keys1))
list3 = list(keys1)  # 将dict_keys类型转换成列表类型
print(type(list3))
values1 = dict1.values()  # 获取所有的value
print(values1, type(values1))
# print(values1[1])
keyValues = dict1.items()  # 获取所有键值对
print(keyValues, type(keyValues))
# print(keyValues[0])
# 先将dict_item类型转成list列表类型
list4 = list(keyValues)
print(list4[0][0])
print(list4[0][1])

# set集合
set1 = {'xiaohu', 'xiaohei', 'xiaobai', 100}
set2 = {'xiaowang', 'xiaohu', 'xiaoli'}

# 并集
print(set1 | set2)
# 交集
print(set1 & set2)
# 差集
print(set1 - set2)
print(set2 - set1)
# 异或
print(set1 ^ set2)

# 如何创建空的set集合或者空字典？
bb = {}  # 这种方式创建的是空的字典
print(type(bb))
cc = set()  # 使用python内置的函数创建空的set集合
print(type(cc))

# if选择语句
# 第一种格式
# if 逻辑表达式:
#    如果为True，则执行
hp = 60
if hp >= 70:
    print("血量健康")

# if else
# 在python中允许连续比较
if 0 <= hp <= 60:
    print("血量不健康")
else:
    print("血量健康")

# 第三种格式
# if  elif  else
score = 85
if 0 <= score < 60:
    print("不及格")
elif 60 <= score < 80:
    print("中等")
else:
    print("优秀")

# 需求: 求出三个数中的最大值
# 在python中有着十分严格的缩进要求
# 推荐一个缩进由一个tab键表示，默认是4个空格
a = 10
b = 20
c = 30
if a > b:
    if a > c:
        print("a是最大值", a)
    else:
        print("c是最大值", c)
else:
    if b > c:
        print("b是最大值", b)
    else:
        print("c是最大值", c)

# for循环
# for 元素变量 in 序列:
#     for循环的语句

# list5 = [100, 234.12, 'xiaohu', True]
# for i in list5:
#     print(i)

# isinstance() 判断该变量是否是某个类型，如果是返回True，如果不是返回False
list6 = [11, 22, ['a', 'b', 'c'], 33, 44]
for i in list6:
    if isinstance(i, list):
        for j in i:
            print(j)

# 用python打印九九乘法表，一行代码搞定！

list1 = ['合肥', '马鞍山', '宿州', '蚌埠']
list2 = [14, 15, 16, 13]

dict2 = {}
for key, value in zip(list1, list2):
    # print(key, ":", value)
    dict2[key] = value
print(dict2)

# range()函数，可以将一组数变成一个可以遍历的序列
for i in range(10):
    print("hello world")

# while循环
a = 10
while a < 20:
    print(a)
    a = a + 1

list7 = [i**2 for i in range(10)]
print(list7)

set3 = {i**2 for i in range(10)}
print(set3)

